import Mock from "mockjs";
import { tableData, experienceInfo, chartData ,clientData} from '@/miscellaneous/index'

// 使用Mock.mock创建拦截器
// 参数1: 匹配的路径  参数2: 请求方法  参数3: 返回的数据
Mock.mock(/\/api\/getTableData/, "get", {
  code: 200,
  message: "success",
  data: tableData
});
Mock.mock(/\/api\/getExperienceInfo/, "get", {
  code: 200,
  message: "success",
  data: experienceInfo
});
Mock.mock(/\/api\/getChartData/, "get", {
  code: 200,
  message: 'success',
  data:chartData
});
// 删除逻辑
Mock.mock(/\/api\/deleteClientData/, "post", (options) => {
  const { id } = JSON.parse(options.body);
  const index = clientData.rows.findIndex((item) => item.id === id);
  if (index !== -1) {
    clientData.rows.splice(index, 1);
    return {
      code: 200,
      message: "删除成功",
    };
  } else {
    return {
      code: 400,
      message: "删除失败，数据不存在",
    };
  }
})

// 查询搜索
Mock.mock(/\/api\/getClientData/, "get", (options) => {
  // 先将拦截拿到的请求路径添加协议和地址
  const url = new URL(options.url, "http://localhost");
  // 从完整的URL中获取查询参数  例如: http://localhost/api/getClientData?keyword=张三&page=1&pageSize=10  从中拿取
  const params = new URLSearchParams(url.search);

  // 分别获取搜索参数
  const keyword = params.get("keyword") || "";
  const page = parseInt(params.get("page")) || 1;
  const pageSize = parseInt(params.get("pageSize")) || 10;

  console.log(`搜索参数 - 关键词: ${keyword}, 页码: ${page}, 每页: ${pageSize}`);

  // 搜索逻辑：根据关键词过滤数据
  // 初始化需要过滤的数据集
  let filteredRows = clientData.rows;

  if (keyword) {
    filteredRows = clientData.rows.filter((item) => {
      // 支持按姓名、性别、地址搜索（不区分大小写）
      const searchText = keyword.toLowerCase();
      return (
        item.name.toLowerCase().includes(searchText) ||
        item.gender.toLowerCase().includes(searchText) ||
        item.address.toLowerCase().includes(searchText)
      );
    });
  }

  // 分页逻辑
  // 因为前端分页组件要的是“ 一整页数据 ”，而不是“ 全部数据 ”。 三部曲的本质是“ 先过滤，再分页 ”，缺一不可：
  // 计算当前页的起始索引和结束索引
  const startIndex = (page - 1) * pageSize;
  const endIndex = startIndex + pageSize;
  // 获取当前页的数据  (左闭右开)
  const paginatedRows = filteredRows.slice(startIndex, endIndex);

  const result = {
    total: filteredRows.length, // 搜索后的总条数
    rows: paginatedRows, // 当前页的数据
  };

  return {
    code: 200,
    message: "success",
    data: result,
  };
})
// 新增  不考虑重名
Mock.mock(/\/api\/addClientData/, "post", (options) => {
  const newClient = JSON.parse(options.body);
  // 生成唯一ID：取当前最大ID + 1，避免ID重复
  const maxId = clientData.rows.length > 0 ? Math.max(...clientData.rows.map(item => item.id)) : 0;
  newClient.id = maxId + 1;
  clientData.rows.push(newClient);
  return {
    code: 200,
    message: "新增成功",
  };
})
// 获取单个客户数据
Mock.mock(/\/api\/getClientById/, "get", (options) => {
  // 从URL中获取查询参数
  const url = new URL(options.url, "http://localhost");
  const params = new URLSearchParams(url.search);
  // id  记得 parseInt 转换为数字
  const id = parseInt(params.get("id"));

  // 查找对应ID的客户数据
  const client = clientData.rows.find((item) => item.id === id);

  if (client) {
    return {
      code: 200,
      message: "success",
      data: client
    };
  } else {
    return {
      code: 404,
      message: "客户不存在",
      data: null
    };
  }
});
// 编辑
Mock.mock(/\/api\/editClientData/, "post", (options) => {
  const updatedClient = JSON.parse(options.body);
  // 查找对应ID的客户数据
  const client = clientData.rows.find((item) => item.id === updatedClient.id);
  if (client) {
    // 更新客户数据
    Object.assign(client, updatedClient);
    return {
      code: 200,
      message: "更新成功",
    };
  } else {
    return {
      code: 404,
      message: "客户不存在",
    };
  }
});

// 确保Mock生效
console.log('Mock.js已加载，表格数据已准备就绪');
